home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume90 / unix / tar / part04 < prev    next >
Encoding:
Internet Message Format  |  1990-03-29  |  38.2 KB

  1. Path: xanth!cs.odu.edu!Amiga-Request
  2. From: Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v90i129: tar - tape archive utility, Part04/05
  5. Message-ID: <11983@xanth.cs.odu.edu>
  6. Date: 29 Mar 90 03:11:41 GMT
  7. Sender: tadguy@cs.odu.edu
  8. Reply-To: hue@netcom.uucp (Jonathan Hue)
  9. Lines: 1066
  10. Approved: tadguy@cs.odu.edu (Tad Guy)
  11. X-Mail-Submissions-To: Amiga@cs.odu.edu
  12. X-Post-Discussions-To: comp.sys.amiga
  13.  
  14. Submitted-by: hue@netcom.uucp (Jonathan Hue)
  15. Posting-number: Volume 90, Issue 129
  16. Archive-name: unix/tar/part04
  17.  
  18. #!/bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 4 (of 5)."
  25. # Contents:  buffer.c tar.5.man.uu
  26. # Wrapped by tadguy@xanth on Wed Mar 28 22:07:21 1990
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'buffer.c' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'buffer.c'\"
  30. else
  31. echo shar: Extracting \"'buffer.c'\" \(16160 characters\)
  32. sed "s/^X//" >'buffer.c' <<'END_OF_FILE'
  33. X/*
  34. X * Buffer management for public domain tar.
  35. X *
  36. X * Written by John Gilmore, ihnp4!hoptoad!gnu, on 25 August 1985.
  37. X *
  38. X * @(#) buffer.c 1.28 11/6/87 Public Domain - gnu
  39. X */
  40. X
  41. X#include <stdio.h>
  42. X#include <errno.h>
  43. X#include <sys/types.h>        /* For non-Berkeley systems */
  44. X#include <sys/stat.h>
  45. X#include <signal.h>
  46. X
  47. X#if defined(MSDOS) || defined (AMIGA)
  48. X# include <fcntl.h>
  49. X#else
  50. X# ifdef XENIX
  51. X#  include <sys/inode.h>
  52. X# endif
  53. X# include <sys/file.h>
  54. X#endif
  55. X
  56. X#include "tar.h"
  57. X#include "port.h"
  58. X
  59. X#define    STDIN    0        /* Standard input  file descriptor */
  60. X#define    STDOUT    1        /* Standard output file descriptor */
  61. X
  62. X#define    PREAD    0        /* Read  file descriptor from pipe() */
  63. X#define    PWRITE    1        /* Write file descriptor from pipe() */
  64. X
  65. Xextern char    *valloc();
  66. Xextern char    *index(), *strcat();
  67. X
  68. X/*
  69. X * V7 doesn't have a #define for this.
  70. X */
  71. X#ifndef O_RDONLY
  72. X#define    O_RDONLY    0
  73. X#endif
  74. X
  75. X#define    MAGIC_STAT    105    /* Magic status returned by child, if
  76. X                   it can't exec.  We hope compress/sh
  77. X                   never return this status! */
  78. X/*
  79. X * The record pointed to by save_rec should not be overlaid
  80. X * when reading in a new tape block.  Copy it to record_save_area first, and
  81. X * change the pointer in *save_rec to point to record_save_area.
  82. X * Saved_recno records the record number at the time of the save.
  83. X * This is used by annofile() to print the record number of a file's
  84. X * header record.
  85. X */
  86. Xstatic union record **save_rec;
  87. Xstatic union record record_save_area;
  88. Xstatic long        saved_recno;
  89. X
  90. X/*
  91. X * PID of child program, if f_compress or remote archive access.
  92. X */
  93. Xstatic int    childpid = 0;
  94. X
  95. X/*
  96. X * Record number of the start of this block of records
  97. X */
  98. Xstatic long    baserec;
  99. X
  100. X/*
  101. X * Error recovery stuff
  102. X */
  103. Xstatic int    r_error_count;
  104. X
  105. X/*
  106. X * Have we hit EOF yet?
  107. X */
  108. Xstatic int    eof;
  109. X
  110. X
  111. X/*
  112. X * Return the location of the next available input or output record.
  113. X * Return NULL for EOF.  Once we have returned NULL, we just keep returning
  114. X * it, to avoid accidentally going on to the next file on the "tape".
  115. X */
  116. Xunion record *
  117. Xfindrec()
  118. X{
  119. X    if (ar_record == ar_last) {
  120. X        if (eof)
  121. X            return (union record *)NULL;    /* EOF */
  122. X        flush_archive();
  123. X        if (ar_record == ar_last) {
  124. X            eof++;
  125. X            return (union record *)NULL;    /* EOF */
  126. X        }
  127. X    }
  128. X    return ar_record;
  129. X}
  130. X
  131. X
  132. X/*
  133. X * Indicate that we have used all records up thru the argument.
  134. X * (should the arg have an off-by-1? XXX FIXME)
  135. X */
  136. Xvoid
  137. Xuserec(rec)
  138. X    union record *rec;
  139. X{
  140. X    while(rec >= ar_record)
  141. X        ar_record++;
  142. X    /*
  143. X     * Do NOT flush the archive here.  If we do, the same
  144. X     * argument to userec() could mean the next record (if the
  145. X     * input block is exactly one record long), which is not what
  146. X     * is intended.
  147. X     */
  148. X    if (ar_record > ar_last)
  149. X        abort();
  150. X}
  151. X
  152. X
  153. X/*
  154. X * Return a pointer to the end of the current records buffer.
  155. X * All the space between findrec() and endofrecs() is available
  156. X * for filling with data, or taking data from.
  157. X */
  158. Xunion record *
  159. Xendofrecs()
  160. X{
  161. X    return ar_last;
  162. X}
  163. X
  164. X#ifndef AMIGA
  165. X/* 
  166. X * Duplicate a file descriptor into a certain slot.
  167. X * Equivalent to BSD "dup2" with error reporting.
  168. X */
  169. Xvoid
  170. Xdupto(from, to, msg)
  171. X    int from, to;
  172. X    char *msg;
  173. X{
  174. X    int err;
  175. X
  176. X    if (from != to) {
  177. X        (void) close(to);
  178. X        err = dup(from);
  179. X        if (err != to) {
  180. X            fprintf(stderr, "tar: cannot dup ");
  181. X            perror(msg);
  182. X            exit(EX_SYSTEM);
  183. X        }
  184. X        (void) close(from);
  185. X    }
  186. X}
  187. X#endif
  188. X
  189. X/*
  190. X * Fork a child to deal with remote files or compression.
  191. X * If rem_host is zero, we are called only for compression.
  192. X */
  193. Xvoid
  194. Xchild_open(rem_host, rem_file)
  195. X    char *rem_host, *rem_file;
  196. X{
  197. X
  198. X#ifdef MSDOS
  199. X    fprintf(stderr,
  200. X      "MSDOS %s cannot deal with compressed or remote archives\n", tar);
  201. X    exit(EX_ARGSBAD);
  202. X#else
  203. X#ifdef AMIGA
  204. X    fprintf(stderr,
  205. X      "Amiga %s cannot deal with compressed archives\n", tar);
  206. X    exit(EX_ARGSBAD);
  207. X#else
  208. X    
  209. X    int pipes[2];
  210. X    int err;
  211. X    struct stat arstat;
  212. X    char cmdbuf[1000];        /* For big file and host names */
  213. X
  214. X    /* Create a pipe to talk to the child over */
  215. X    err = pipe(pipes);
  216. X    if (err < 0) {
  217. X        perror ("tar: cannot create pipe to child");
  218. X        exit(EX_SYSTEM);
  219. X    }
  220. X    
  221. X    /* Fork child process */
  222. X    childpid = fork();
  223. X    if (childpid < 0) {
  224. X        perror("tar: cannot fork");
  225. X        exit(EX_SYSTEM);
  226. X    }
  227. X
  228. X    /*
  229. X     * Parent process.  Clean up.
  230. X     *
  231. X     * We always close the archive file (stdin, stdout, or opened file)
  232. X     * since the child will end up reading or writing that for us.
  233. X     * Note that this may leave standard input closed.
  234. X     * We close the child's end of the pipe since they will handle
  235. X     * that too; and we set <archive> to the other end of the pipe.
  236. X     *
  237. X     * If reading, we set f_reblock since reading pipes or network
  238. X     * sockets produces odd length data.
  239. X     */
  240. X    if (childpid > 0) {
  241. X        (void) close (archive);    
  242. X        if (ar_reading) {
  243. X            (void) close (pipes[PWRITE]);
  244. X            archive = pipes[PREAD];
  245. X            f_reblock++;
  246. X        } else {
  247. X            (void) close (pipes[PREAD]);
  248. X            archive = pipes[PWRITE];
  249. X        }
  250. X        return;
  251. X    }
  252. X
  253. X    /*
  254. X     * Child process.
  255. X     */
  256. X    if (ar_reading) {
  257. X        /*
  258. X         * Reading from the child...
  259. X         *
  260. X         * Close the read-side of the pipe, which our parent will use.
  261. X         * Move the write-side of pipe to stdout,
  262. X         * If local, move archive input to child's stdin,
  263. X         * then run the child.
  264. X         */
  265. X        (void) close (pipes[PREAD]);
  266. X        dupto(pipes[PWRITE], STDOUT, "to stdout");
  267. X        if (rem_host) {
  268. X            (void) close (STDIN);    /* rsh abuses stdin */
  269. X            if (STDIN != open("/dev/null"))
  270. X                perror("Can't open /dev/null");
  271. X            sprintf(cmdbuf,
  272. X                "rsh '%s' dd '<%s' bs=%db",
  273. X                rem_host, rem_file, blocking);
  274. X            if (f_compress)
  275. X                strcat(cmdbuf, "| compress -d");
  276. X#ifdef DEBUG
  277. X            fprintf(stderr, "Exec-ing: %s\n", cmdbuf);
  278. X#endif
  279. X            execlp("sh", "sh", "-c", cmdbuf, (char *)0);
  280. X            perror("tar: cannot exec sh");
  281. X        } else {
  282. X            /*
  283. X             * If we are reading a disk file, compress is OK;
  284. X             * otherwise, we have to reblock the input in case it's
  285. X             * coming from a tape drive.  This is an optimization.
  286. X             */
  287. X            dupto(archive, STDIN, "to stdin");
  288. X            err = fstat(STDIN, &arstat);
  289. X            if (err != 0) {
  290. X                perror("tar: can't fstat archive");
  291. X                exit(EX_SYSTEM);
  292. X            }
  293. X            if ((arstat.st_mode & S_IFMT) == S_IFREG) {
  294. X                execlp("compress", "compress", "-d", (char *)0);
  295. X                perror("tar: cannot exec compress");
  296. X            } else {
  297. X                /* Non-regular file needs dd before compress */
  298. X                sprintf(cmdbuf,
  299. X                    "dd bs=%db | compress -d",
  300. X                    blocking);
  301. X#ifdef DEBUG
  302. X                fprintf(stderr, "Exec-ing: %s\n", cmdbuf);
  303. X#endif
  304. X                execlp("sh", "sh", "-c", cmdbuf, (char *)0);
  305. X                perror("tar: cannot exec sh");
  306. X            }
  307. X        }
  308. X        exit(MAGIC_STAT);
  309. X    } else {
  310. X        /*
  311. X         * Writing archive to the child.
  312. X         * It would like to run either:
  313. X         *    compress
  314. X         *    compress |            dd obs=20b
  315. X         *           rsh 'host' dd obs=20b '>foo'
  316. X         * or    compress | rsh 'host' dd obs=20b '>foo'
  317. X         *
  318. X         * We need the dd to reblock the output to the
  319. X         * user's specs, if writing to a device or over
  320. X         * the net.  However, it produces a stupid
  321. X         * message about how many blocks it processed.
  322. X         * Because the shell on the remote end could be just
  323. X         * about any shell, we can't depend on it to do
  324. X         * redirect stderr properly for us -- the csh
  325. X         * doesn't use the same syntax as the Bourne shell.
  326. X         * On the other hand, if we just ignore stderr on
  327. X         * this end, we won't see errors from rsh, or from
  328. X         * the inability of "dd" to write its output file.
  329. X         * The combination of the local sh, the rsh, the
  330. X         * remote csh, and maybe a remote sh conspires to mess
  331. X         * up any possible quoting method, so grumble! we
  332. X         * punt and just accept the fucking "xxx blocks"
  333. X         * messages.  The real fix would be a "dd" that
  334. X         * would shut up.
  335. X         * 
  336. X         * Close the write-side of the pipe, which our parent will use.
  337. X         * Move the read-side of the pipe to stdin,
  338. X         * If local, move archive output to the child's stdout.
  339. X         * then run the child.
  340. X         */
  341. X        (void) close (pipes[PWRITE]);
  342. X        dupto(pipes[PREAD], STDIN, "to stdin");
  343. X        if (!rem_host)
  344. X            dupto(archive, STDOUT, "to stdout");
  345. X
  346. X        cmdbuf[0] = '\0';
  347. X        if (f_compress) {
  348. X            if (!rem_host) {
  349. X                err = fstat(STDOUT, &arstat);
  350. X                if (err != 0) {
  351. X                    perror("tar: can't fstat archive");
  352. X                    exit(EX_SYSTEM);
  353. X                }
  354. X                if ((arstat.st_mode & S_IFMT) == S_IFREG) {
  355. X                    execlp("compress", "compress", (char *)0);
  356. X                    perror("tar: cannot exec compress");
  357. X                }
  358. X            }
  359. X            strcat(cmdbuf, "compress | ");
  360. X        }
  361. X        if (rem_host) {
  362. X            sprintf(cmdbuf+strlen(cmdbuf),
  363. X              "rsh '%s' dd obs=%db '>%s'",
  364. X                 rem_host, blocking, rem_file);
  365. X        } else {
  366. X            sprintf(cmdbuf+strlen(cmdbuf),
  367. X                "dd obs=%db",
  368. X                blocking);
  369. X        }
  370. X#ifdef DEBUG
  371. X        fprintf(stderr, "Exec-ing: %s\n", cmdbuf);
  372. X#endif
  373. X        execlp("sh", "sh", "-c", cmdbuf, (char *)0);
  374. X        perror("tar: cannot exec sh");
  375. X        exit(MAGIC_STAT);
  376. X    }
  377. X#endif    /* AMIGA */
  378. X#endif    /* MSDOS */
  379. X}
  380. X
  381. X
  382. X/*
  383. X * Open an archive file.  The argument specifies whether we are
  384. X * reading or writing.
  385. X */
  386. Xopen_archive(read)
  387. X    int read;
  388. X{
  389. X    char *colon, *slash;
  390. X    char *rem_host = 0, *rem_file;
  391. X
  392. X#ifndef AMIGA
  393. X    colon = index(ar_file, ':');
  394. X    if (colon) {
  395. X        slash = index(ar_file, '/');
  396. X        if (slash && slash > colon) {
  397. X            /*
  398. X             * Remote file specified.  Parse out separately,
  399. X             * and don't try to open it on the local system.
  400. X             */
  401. X            rem_file = colon + 1;
  402. X            rem_host = ar_file;
  403. X            *colon = '\0';
  404. X            goto gotit;
  405. X        }
  406. X    }
  407. X#endif
  408. X    if (ar_file[0] == '-' && ar_file[1] == '\0') {
  409. X        f_reblock++;    /* Could be a pipe, be safe */
  410. X        if (read)    archive = STDIN;
  411. X        else        archive = STDOUT;
  412. X    } else if (read) {
  413. X        archive = open(ar_file, O_RDONLY);
  414. X    } else {
  415. X        archive = creat(ar_file, 0666);
  416. X    }
  417. X
  418. X    if (archive < 0) {
  419. X        perror(ar_file);
  420. X        exit(EX_BADARCH);
  421. X    }
  422. X
  423. X#ifdef    MSDOS
  424. X    setmode(archive, O_BINARY);
  425. X#endif
  426. X
  427. Xgotit:
  428. X    if (blocksize == 0) {
  429. X        fprintf(stderr, "tar: invalid value for blocksize\n");
  430. X        exit(EX_ARGSBAD);
  431. X    }
  432. X
  433. X    /*NOSTRICT*/
  434. X    ar_block = (union record *) valloc((unsigned)blocksize);
  435. X    if (!ar_block) {
  436. X        fprintf(stderr,
  437. X        "tar: could not allocate memory for blocking factor %d\n",
  438. X            blocking);
  439. X        exit(EX_ARGSBAD);
  440. X    }
  441. X
  442. X    ar_record = ar_block;
  443. X    ar_last   = ar_block + blocking;
  444. X    ar_reading = read;
  445. X
  446. X    if (f_compress || rem_host) 
  447. X        child_open(rem_host, rem_file);
  448. X
  449. X    if (read) {
  450. X        ar_last = ar_block;        /* Set up for 1st block = # 0 */
  451. X        (void) findrec();        /* Read it in, check for EOF */
  452. X    }
  453. X}
  454. X
  455. X
  456. X/*
  457. X * Remember a union record * as pointing to something that we
  458. X * need to keep when reading onward in the file.  Only one such
  459. X * thing can be remembered at once, and it only works when reading
  460. X * an archive.
  461. X *
  462. X * We calculate "offset" then add it because some compilers end up
  463. X * adding (baserec+ar_record), doing a 9-bit shift of baserec, then
  464. X * subtracting ar_block from that, shifting it back, losing the top 9 bits.
  465. X */
  466. Xsaverec(pointer)
  467. X    union record **pointer;
  468. X{
  469. X    long offset;
  470. X
  471. X    save_rec = pointer;
  472. X    offset = ar_record - ar_block;
  473. X    saved_recno = baserec + offset;
  474. X}
  475. X
  476. X/*
  477. X * Perform a write to flush the buffer.
  478. X */
  479. Xfl_write()
  480. X{
  481. X    int err;
  482. X
  483. X    err = write(archive, ar_block->charptr, blocksize);
  484. X    if (err == blocksize) return;
  485. X    /* FIXME, multi volume support on write goes here */
  486. X    if (err < 0)
  487. X        perror(ar_file);
  488. X    else
  489. X        fprintf(stderr, "tar: %s: write failed, short %d bytes\n",
  490. X            ar_file, blocksize - err);
  491. X    exit(EX_BADARCH);
  492. X}
  493. X
  494. X
  495. X/*
  496. X * Handle read errors on the archive.
  497. X *
  498. X * If the read should be retried, readerror() returns to the caller.
  499. X */
  500. Xvoid
  501. Xreaderror()
  502. X{
  503. X#    define    READ_ERROR_MAX    10
  504. X
  505. X    read_error_flag++;        /* Tell callers */
  506. X
  507. X    annorec(stderr, tar);
  508. X    fprintf(stderr, "Read error on ");
  509. X    perror(ar_file);
  510. X
  511. X    if (baserec == 0) {
  512. X        /* First block of tape.  Probably stupidity error */
  513. X        exit(EX_BADARCH);
  514. X    }    
  515. X
  516. X    /*
  517. X     * Read error in mid archive.  We retry up to READ_ERROR_MAX times
  518. X     * and then give up on reading the archive.  We set read_error_flag
  519. X     * for our callers, so they can cope if they want.
  520. X     */
  521. X    if (r_error_count++ > READ_ERROR_MAX) {
  522. X        annorec(stderr, tar);
  523. X        fprintf(stderr, "Too many errors, quitting.\n");
  524. X        exit(EX_BADARCH);
  525. X    }
  526. X    return;
  527. X}
  528. X
  529. X
  530. X/*
  531. X * Perform a read to flush the buffer.
  532. X */
  533. Xfl_read()
  534. X{
  535. X    int err;        /* Result from system call */
  536. X    int left;        /* Bytes left */
  537. X    char *more;        /* Pointer to next byte to read */
  538. X
  539. X    /*
  540. X     * Clear the count of errors.  This only applies to a single
  541. X     * call to fl_read.  We leave read_error_flag alone; it is
  542. X     * only turned off by higher level software.
  543. X     */
  544. X    r_error_count = 0;    /* Clear error count */
  545. X
  546. X    /*
  547. X     * If we are about to wipe out a record that
  548. X     * somebody needs to keep, copy it out to a holding
  549. X     * area and adjust somebody's pointer to it.
  550. X     */
  551. X    if (save_rec &&
  552. X        *save_rec >= ar_record &&
  553. X        *save_rec < ar_last) {
  554. X        record_save_area = **save_rec;
  555. X        *save_rec = &record_save_area;
  556. X    }
  557. Xerror_loop:
  558. X    err = read(archive, ar_block->charptr, blocksize);
  559. X    if (err == blocksize) return;
  560. X    if (err < 0) {
  561. X        readerror();
  562. X        goto error_loop;    /* Try again */
  563. X    }
  564. X
  565. X    more = ar_block->charptr + err;
  566. X    left = blocksize - err;
  567. X
  568. Xagain:
  569. X    if (0 == (((unsigned)left) % RECORDSIZE)) {
  570. X        /* FIXME, for size=0, multi vol support */
  571. X        /* On the first block, warn about the problem */
  572. X        if (!f_reblock && baserec == 0 && f_verbose && err > 0) {
  573. X            annorec(stderr, tar);
  574. X            fprintf(stderr, "Blocksize = %d record%s\n",
  575. X                err / RECORDSIZE, (err > RECORDSIZE)? "s": "");
  576. X        }
  577. X        ar_last = ar_block + ((unsigned)(blocksize - left))/RECORDSIZE;
  578. X        return;
  579. X    }
  580. X    if (f_reblock) {
  581. X        /*
  582. X         * User warned us about this.  Fix up.
  583. X         */
  584. X        if (left > 0) {
  585. Xerror2loop:
  586. X            err = read(archive, more, left);
  587. X            if (err < 0) {
  588. X                readerror();
  589. X                goto error2loop;    /* Try again */
  590. X            }
  591. X            if (err == 0) {
  592. X                annorec(stderr, tar);
  593. X                fprintf(stderr,
  594. X        "%s: eof not on block boundary, strange...\n",
  595. X                    ar_file);
  596. X                exit(EX_BADARCH);
  597. X            }
  598. X            left -= err;
  599. X            more += err;
  600. X            goto again;
  601. X        }
  602. X    } else {
  603. X        annorec(stderr, tar);
  604. X        fprintf(stderr, "%s: read %d bytes, strange...\n",
  605. X            ar_file, err);
  606. X        exit(EX_BADARCH);
  607. X    }
  608. X}
  609. X
  610. X
  611. X/*
  612. X * Flush the current buffer to/from the archive.
  613. X */
  614. Xflush_archive()
  615. X{
  616. X
  617. X    baserec += ar_last - ar_block;    /* Keep track of block #s */
  618. X    ar_record = ar_block;        /* Restore pointer to start */
  619. X    ar_last = ar_block + blocking;    /* Restore pointer to end */
  620. X
  621. X    if (!ar_reading) 
  622. X        fl_write();
  623. X    else
  624. X        fl_read();
  625. X}
  626. X
  627. X/*
  628. X * Close the archive file.
  629. X */
  630. Xclose_archive()
  631. X{
  632. X    int child;
  633. X    int status;
  634. X
  635. X    if (!ar_reading) flush_archive();
  636. X    (void) close(archive);
  637. X
  638. X#if !defined(MSDOS) && !defined(AMIGA)
  639. X    if (childpid) {
  640. X        /*
  641. X         * Loop waiting for the right child to die, or for
  642. X         * no more kids.
  643. X         */
  644. X        while (((child = wait(&status)) != childpid) && child != -1)
  645. X            ;
  646. X
  647. X        if (child != -1) {
  648. X            switch (TERM_SIGNAL(status)) {
  649. X            case 0:
  650. X                /* Child voluntarily terminated  -- but why? */
  651. X                if (TERM_VALUE(status) == MAGIC_STAT) {
  652. X                    exit(EX_SYSTEM);/* Child had trouble */
  653. X                }
  654. X                if (TERM_VALUE(status) == (SIGPIPE + 128)) {
  655. X                    /*
  656. X                     * /bin/sh returns this if its child
  657. X                     * dies with SIGPIPE.  'Sok.
  658. X                     */
  659. X                    break;
  660. X                } else if (TERM_VALUE(status))
  661. X                    fprintf(stderr,
  662. X                  "tar: child returned status %d\n",
  663. X                        TERM_VALUE(status));
  664. X            case SIGPIPE:
  665. X                break;        /* This is OK. */
  666. X
  667. X            default:
  668. X                fprintf(stderr,
  669. X                 "tar: child died with signal %d%s\n",
  670. X                 TERM_SIGNAL(status),
  671. X                 TERM_COREDUMP(status)? " (core dumped)": "");
  672. X            }
  673. X        }
  674. X    }
  675. X#endif    /* MSDOS */
  676. X}
  677. X
  678. X
  679. X/*
  680. X * Message management.
  681. X *
  682. X * anno writes a message prefix on stream (eg stdout, stderr).
  683. X *
  684. X * The specified prefix is normally output followed by a colon and a space.
  685. X * However, if other command line options are set, more output can come
  686. X * out, such as the record # within the archive.
  687. X *
  688. X * If the specified prefix is NULL, no output is produced unless the
  689. X * command line option(s) are set.
  690. X *
  691. X * If the third argument is 1, the "saved" record # is used; if 0, the
  692. X * "current" record # is used.
  693. X */
  694. Xvoid
  695. Xanno(stream, prefix, savedp)
  696. X    FILE    *stream;
  697. X    char    *prefix;
  698. X    int    savedp;
  699. X{
  700. X#    define    MAXANNO    50
  701. X    char    buffer[MAXANNO];    /* Holds annorecment */
  702. X#    define    ANNOWIDTH 13
  703. X    int    space;
  704. X    long    offset;
  705. X
  706. X    /* Make sure previous output gets out in sequence */
  707. X    if (stream == stderr)
  708. X        fflush(stdout);
  709. X    if (f_sayblock) {
  710. X        if (prefix) {
  711. X            fputs(prefix, stream);
  712. X            putc(' ', stream);
  713. X        }
  714. X        offset = ar_record - ar_block;
  715. X        sprintf(buffer, "rec %d: ",
  716. X            savedp?    saved_recno:
  717. X                baserec + offset);
  718. X        fputs(buffer, stream);
  719. X        space = ANNOWIDTH - strlen(buffer);
  720. X        if (space > 0) {
  721. X            fprintf(stream, "%*s", space, "");
  722. X        }
  723. X    } else if (prefix) {
  724. X        fputs(prefix, stream);
  725. X        fputs(": ", stream);
  726. X    }
  727. X}
  728. END_OF_FILE
  729. if test 16160 -ne `wc -c <'buffer.c'`; then
  730.     echo shar: \"'buffer.c'\" unpacked with wrong size!
  731. fi
  732. # end of 'buffer.c'
  733. fi
  734. if test -f 'tar.5.man.uu' -a "${1}" != "-c" ; then 
  735.   echo shar: Will not clobber existing file \"'tar.5.man.uu'\"
  736. else
  737. echo shar: Extracting \"'tar.5.man.uu'\" \(19528 characters\)
  738. sed "s/^X//" >'tar.5.man.uu' <<'END_OF_FILE'
  739. Xbegin 644 tar.5.man
  740. XM"@H*("`@("!4"%0(5`A400A!"$$(05((4@A2"%(H""@(*`@H-0@U"#4(-2D(W
  741. XM*0@I""D@("`@("`@("`@("`@00A!"$$(06T(;0AM"&UI"&D(:0AI9PAG"&<(<
  742. XM9V$(80AA"&%$"$0(1`A$3PA/"$\(3U,(4PA3"%,@*`@H""@(*#$(,0@Q"#$U,
  743. XM"#4(-0@U($\(3PA/"$]C"&,(8PAC=`AT"'0(=&\(;PAO"&]B"&((8@AB90AE]
  744. XM"&4(97((<@AR"'(@,0@Q"#$(,3D(.0@Y"#DX"#@(.`@X-P@W"#<(-RD(*0@II
  745. XM""D@("`@("`@("`@("`@(%0(5`A4"%1!"$$(00A!4@A2"%((4B@(*`@H""@U"
  746. XM"#4(-0@U*0@I""D(*0H*"@H@("`@($X(3@A."$Y!"$$(00A!30A-"$T(344(`
  747. XM10A%"$4*("`@("`@("`@('1A<B`M('1A<&4@*&]R(&]T:&5R(&UE9&EA*2!A\
  748. XM<F-H:79E(&9I;&4@9F]R;6%T"@H@("`@($0(1`A$"$1%"$4(10A%4PA3"%,(#
  749. XM4T,(0PA#"$-2"%((4@A220A)"$D(25`(4`A0"%!4"%0(5`A420A)"$D(24\(F
  750. XM3PA/"$]."$X(3@A."B`@("`@("`@("!!(&!@=&%R('1A<&4G)R!O<B!F:6QE8
  751. XM(&-O;G1A:6YS(&$@<V5R:65S(&]F(')E8V]R9',N("!%86-H"B`@("`@("`@;
  752. XM("!R96-O<F0@8V]N=&%I;G,@5%)%0T]21%-)6D4@8GET97,@*'-E92!B96QOZ
  753. XM=RDN("!!;'1H;W5G:`H@("`@("`@("`@=&AI<R!F;W)M870@;6%Y(&)E('1H_
  754. XM;W5G:'0@;V8@87,@8F5I;F<@;VX@;6%G;F5T:6,@=&%P92P*("`@("`@("`@Z
  755. XM(&]T:&5R(&UE9&EA(&%R92!O9G1E;B!U<V5D+B`@16%C:"!F:6QE(&%R8VAI-
  756. XM=F5D(&ES"B`@("`@("`@("!R97!R97-E;G1E9"!B>2!A(&AE861E<B!R96-OT
  757. XM<F0@=VAI8V@@9&5S8W)I8F5S('1H92!F:6QE+`H@("`@("`@("`@9F]L;&]W'
  758. XM960@8GD@>F5R;R!O<B!M;W)E(')E8V]R9',@=VAI8V@@9VEV92!T:&4@8V]N)
  759. XM=&5N=',@;V8*("`@("`@("`@('1H92!F:6QE+B`@070@=&AE(&5N9"!O9B!T2
  760. XM:&4@87)C:&EV92!F:6QE('1H97)E(&UA>2!B92!A"B`@("`@("`@("!R96-O)
  761. XM<F0@9FEL;&5D('=I=&@@8FEN87)Y('IE<F]S(&%S(&%N(&5N9"UO9BUF:6QE#
  762. XM(&EN9&EC871O<BX*("`@("`@("`@($$@<F5A<V]N86)L92!S>7-T96T@<VAO!
  763. XM=6QD('=R:71E(&$@<F5C;W)D(&]F('IE<F]S(&%T('1H90H@("`@("`@("`@8
  764. XM96YD+"!B=70@;75S="!N;W0@87-S=6UE('1H870@86X@96YD+6]F+69I;&4@<
  765. XM<F5C;W)D(&5X:7-T<PH@("`@("`@("`@=VAE;B!R96%D:6YG(&%N(&%R8VAI+
  766. XM=F4N"@H@("`@("`@("`@5&AE(')E8V]R9',@;6%Y(&)E(&)L;V-K960@9F]RY
  767. XM('!H>7-I8V%L($DO3R!O<&5R871I;VYS+@H@("`@("`@("`@16%C:"!B;&]CQ
  768. XM:R!O9B!?"$X@<F5C;W)D<R`H=VAE<F4@7PA.(&ES('-E="!B>2!T:&4@+0@M%
  769. XM""T(+6((8@AB"&(@;W!T:6]N('1O"B`@("`@("`@("!?"'1?"&%?"'(I(&ESQ
  770. XM('=R:71T96X@=VET:"!A('-I;F=L92!W<FET92@I(&]P97)A=&EO;BX@($]ND
  771. XM"B`@("`@("`@("!M86=N971I8R!T87!E<RP@=&AE(')E<W5L="!O9B!S=6-HC
  772. XM(&$@=W)I=&4@:7,@82!S:6YG;&4@=&%P90H@("`@("`@("`@<F5C;W)D+B`@L
  773. XM5VAE;B!W<FET:6YG(&%N(&%R8VAI=F4L('1H92!L87-T(&)L;V-K(&]F(')E?
  774. XM8V]R9',*("`@("`@("`@('-H;W5L9"!B92!W<FET=&5N(&%T('1H92!F=6QLQ
  775. XM('-I>F4L('=I=&@@<F5C;W)D<R!A9G1E<B!T:&4*("`@("`@("`@('IE<F\@R
  776. XM<F5C;W)D(&-O;G1A:6YI;F<@86QL('IE<F]E<RX@(%=H96X@<F5A9&EN9R!A5
  777. XM;B!A<F-H:79E+`H@("`@("`@("`@82!R96%S;VYA8FQE('-Y<W1E;2!S:&]UG
  778. XM;&0@<')O<&5R;'D@:&%N9&QE(&%N(&%R8VAI=F4@=VAO<V4*("`@("`@("`@:
  779. XM(&QA<W0@8FQO8VL@:7,@<VAO<G1E<B!T:&%N('1H92!R97-T+"!O<B!W:&ECD
  780. XM:"!C;VYT86EN<PH@("`@("`@("`@9V%R8F%G92!R96-O<F1S(&%F=&5R(&$@?
  781. XM>F5R;R!R96-O<F0N"@H@("`@("`@("`@5&AE(&AE861E<B!R96-O<F0@:7,@&
  782. XM9&5F:6YE9"!I;B!T:&4@:&5A9&5R(&9I;&4@/'1A<BYH/B!A<PH@("`@("`@%
  783. XM("`@9F]L;&]W<SH*&SD@("`@("`@("`@+RH*("`@("`@("`@("`J(%-T86YD%
  784. XM87)D($%R8VAI=F4@1F]R;6%T("T@4W1A;F1A<F0@5$%2("T@55-405(*("`@M
  785. XM("`@("`@("`J+PH@("`@("`@("`@(V1E9FEN92`@(%)%0T]21%-)6D4@("`@+
  786. XM(#4Q,@H@("`@("`@("`@(V1E9FEN92`@($Y!35-)6B`@("`Q,#`*("`@("`@=
  787. XM("`@("-D969I;F4@("!454Y-3$5.("`@,S(*("`@("`@("`@("-D969I;F4@.
  788. XM("!41TY-3$5.("`@,S(*"B`@("`@("`@("!U;FEO;B!R96-O<F0@>PH@("`@;
  789. XM("`@("`@("`@("!C:&%R("`@("`@8VAA<G!T<EM214-/4D1325I%73L*("`@)
  790. XM("`@("`@("`@("`@<W1R=6-T(&AE861E<B!["B`@("`@("`@("`@("`@("`@S
  791. XM("`@8VAA<B!N86UE6TY!35-)6ET["B`@("`@("`@("`@("`@("`@("`@8VAAZ
  792. XM<B!M;V1E6SA=.PH@("`@("`@("`@("`@("`@("`@(&-H87(@=6ED6SA=.PH@!
  793. XM("`@("`@("`@("`@("`@("`@(&-H87(@9VED6SA=.PH@("`@("`@("`@("`@G
  794. XM("`@("`@(&-H87(@<VEZ95LQ,ET["B`@("`@("`@("`@("`@("`@("`@8VAAE
  795. XM<B!M=&EM95LQ,ET["B`@("`@("`@("`@("`@("`@("`@8VAA<B!C:&MS=6U;R
  796. XM.%T["B`@("`@("`@("`@("`@("`@("`@8VAA<B!L:6YK9FQA9SL*("`@("`@E
  797. XM("`@("`@("`@("`@("!C:&%R(&QI;FMN86UE6TY!35-)6ET["B`@("`@("`@<
  798. XM("`@("`@("`@("`@8VAA<B!M86=I8ULX73L*("`@("`@("`@("`@("`@("`@T
  799. XM("!C:&%R('5N86UE6U153DU,14Y=.PH@("`@("`@("`@("`@("`@("`@(&-H_
  800. XM87(@9VYA;65;5$=.34Q%3ET["@H*&SD@("`@(%!A9V4@,2`@("`@("`@("`@#
  801. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`H<')I;G1E9"`S+S@O'
  802. XM.3`I"@H*"@H*"B`@("`@5`A4"%0(5$$(00A!"$%2"%((4@A2*`@H""@(*#4(1
  803. XM-0@U"#4I""D(*0@I("`@("`@("`@("`@($$(00A!"$%M"&T(;0AM:0AI"&D(&
  804. XM:6<(9PAG"&=A"&$(80AA1`A$"$0(1$\(3PA/"$]3"%,(4PA3("@(*`@H""@QB
  805. XM"#$(,0@Q-0@U"#4(-2!/"$\(3PA/8PAC"&,(8W0(=`AT"'1O"&\(;PAO8@ABW
  806. XM"&((8F4(90AE"&5R"'((<@AR(#$(,0@Q"#$Y"#D(.0@Y.`@X"#@(.#<(-P@W%
  807. XM"#<I""D(*0@I("`@("`@("`@("`@("!4"%0(5`A400A!"$$(05((4@A2"%(H'
  808. XM""@(*`@H-0@U"#4(-2D(*0@I""D*"@H*("`@("`@("`@("`@("`@("`@("!C#
  809. XM:&%R(&1E=FUA:F]R6SA=.PH@("`@("`@("`@("`@("`@("`@(&-H87(@9&5VE
  810. XM;6EN;W);.%T["B`@("`@("`@("`@("`@('T@:&5A9&5R.PH@("`@("`@("`@%
  811. XM?3L*"B`@("`@("`@("`O*B!4:&4@8VAE8VMS=6T@9FEE;&0@:7,@9FEL;&5D)
  812. XM('=I=&@@=&AI<R!W:&EL92!T:&4@8VAE8VMS=6T@:7,@8V]M<'5T960N("HOE
  813. XM"B`@("`@("`@("`C9&5F:6YE("`@0TA+0DQ!3DM3("(@("`@("`@("(@("`@M
  814. XM("`@("`@+RH@."!B;&%N:W,L(&YO(&YU;&P@*B\*"B`@("`@("`@("`O*B!4J
  815. XM:&4@;6%G:6,@9FEE;&0@:7,@9FEL;&5D('=I=&@@=&AI<R!I9B!U;F%M92!AX
  816. XM;F0@9VYA;64@87)E('9A;&ED+B`J+PH@("`@("`@("`@(V1E9FEN92`@(%1-"
  817. XM04=)0R`@("`B=7-T87(@("(@("`@("`O*B`W(&-H87)S(&%N9"!A(&YU;&P@W
  818. XM*B\*"B`@("`@("`@("`O*B!4:&4@;&EN:V9L86<@9&5F:6YE<R!T:&4@='EP+
  819. XM92!O9B!F:6QE("HO"B`@("`@("`@("`C9&5F:6YE("`@3$9?3TQ$3D]234%,D
  820. XM("=<,"<@("`@("`@("\J($YO<FUA;"!D:7-K(&9I;&4L(%5N:7@@8V]M<&%T[
  821. XM:6)L92`J+PH@("`@("`@("`@(V1E9FEN92`@($Q&7TY/4DU!3"`G,"<@("`@E
  822. XM("`@+RH@3F]R;6%L(&1I<VL@9FEL92`J+PH@("`@("`@("`@(V1E9FEN92`@>
  823. XM($Q&7TQ)3DL@("`G,2<@("`@("`@+RH@3&EN:R!T;R!P<F5V:6]U<VQY(&1U#
  824. XM;7!E9"!F:6QE("HO"B`@("`@("`@("`C9&5F:6YE("`@3$9?4UE-3$E.2R`@O
  825. XM("`@)S(G("`@("`@("\J(%-Y;6)O;&EC(&QI;FL@*B\*("`@("`@("`@("-D3
  826. XM969I;F4@("!,1E]#2%(@("`@)S,G("`@("`@("\J($-H87)A8W1E<B!S<&5CG
  827. XM:6%L(&9I;&4@*B\*("`@("`@("`@("-D969I;F4@("!,1E]"3$L@("`@)S0GS
  828. XM("`@("`@("\J($)L;V-K('-P96-I86P@9FEL92`J+PH@("`@("`@("`@(V1ET
  829. XM9FEN92`@($Q&7T1)4B`@("`@("`@("<U)R`@("`@("`O*B!$:7)E8W1O<GD@C
  830. XM*B\*("`@("`@("`@("-D969I;F4@("!,1E]&249/("`@)S8G("`@("`@("\J#
  831. XM($9)1D\@<W!E8VEA;"!F:6QE("HO"B`@("`@("`@("`C9&5F:6YE("`@3$9?G
  832. XM0T].5$E'("<W)R`@("`@("`O*B!#;VYT:6=U;W5S(&9I;&4@*B\*("`@("`@U
  833. XM("`@("\J($9U<G1H97(@;&EN:R!T>7!E<R!M87D@8F4@9&5F:6YE9"!L871E_
  834. XM<BX@*B\*"B`@("`@("`@("`O*B!":71S('5S960@:6X@=&AE(&UO9&4@9FEEZ
  835. XM;&0@+2!V86QU97,@:6X@;V-T86P@*B\*("`@("`@("`@("-D969I;F4@("!4\
  836. XM4U5)1"`@("`@("`@("`P-#`P,"`@("`@("`@("`O*B!3970@54E$(&]N(&5X*
  837. XM96-U=&EO;B`J+PH@("`@("`@("`@(V1E9FEN92`@(%131TE$("`@("`@("`@#
  838. XM(#`R,#`P("`@("`@("`@("\J(%-E="!'240@;VX@97AE8W5T:6]N("HO"B`@?
  839. XM("`@("`@("`C9&5F:6YE("`@5%-65%@@("`@("`@("`@,#$P,#`@("`@("`@H
  840. XM("`@+RH@4V%V92!T97AT("AS=&EC:WD@8FET*2`J+PH*("`@("`@("`@("\J:
  841. XM($9I;&4@<&5R;6ES<VEO;G,@*B\*("`@("`@("`@("-D969I;F4@("!455)%M
  842. XM040@("`@,#`T,#`@("`@("`@("`@+RH@<F5A9"!B>2!O=VYE<B`J+PH@("`@7
  843. XM("`@("`@(V1E9FEN92`@(%155U))5$4@("`P,#(P,"`@("`@("`@("`O*B!WD
  844. XM<FET92!B>2!O=VYE<B`J+PH@("`@("`@("`@(V1E9FEN92`@(%1515A%0R`@Y
  845. XM("`P,#$P,"`@("`@("`@("`O*B!E>&5C=71E+W-E87)C:"!B>2!O=VYE<B`J2
  846. XM+PH@("`@("`@("`@(V1E9FEN92`@(%1'4D5!1"`@("`P,#`T,"`@("`@("`@2
  847. XM("`O*B!R96%D(&)Y(&=R;W5P("HO"B`@("`@("`@("`C9&5F:6YE("`@5$=7`
  848. XM4DE412`@(#`P,#(P("`@("`@("`@("\J('=R:71E(&)Y(&=R;W5P("HO"B`@U
  849. XM("`@("`@("`C9&5F:6YE("`@5$=%6$5#("`@(#`P,#$P("`@("`@("`@("\JX
  850. XM(&5X96-U=&4O<V5A<F-H(&)Y(&=R;W5P("HO"B`@("`@("`@("`C9&5F:6YE1
  851. XM("`@5$]214%$("`@(#`P,#`T("`@("`@("`@("\J(')E860@8GD@;W1H97(@%
  852. XM*B\*("`@("`@("`@("-D969I;F4@("!43U=2251%("`@,#`P,#(@("`@("`@Q
  853. XM("`@+RH@=W)I=&4@8GD@;W1H97(@*B\*("`@("`@("`@("-D969I;F4@("!4&
  854. XM3T5814,@("`@,#`P,#$@("`@("`@("`@+RH@97AE8W5T92]S96%R8V@@8GD@1
  855. XM;W1H97(@*B\*"B`@("`@("`@("!!;&P@8VAA<F%C=&5R<R!I;B!H96%D97(@H
  856. XM<F5C;W)D<R!A<F4@<F5P<F5S96YT960@=7-I;F<@."UB:70*("`@("`@("`@_
  857. XM(&-H87)A8W1E<G,@:6X@=&AE(&QO8V%L('9A<FEA;G0@;V8@05-#24DN("!%)
  858. XM86-H(&9I96QD('=I=&AI;@H@("`@("`@("`@=&AE('-T<G5C='5R92!I<R!C>
  859. XM;VYT:6=U;W5S.R!T:&%T(&ES+"!T:&5R92!I<R!N;R!P861D:6YG"B`@("`@S
  860. XM("`@("!U<V5D('=I=&AI;B!T:&4@<W1R=6-T=7)E+B`@16%C:"!C:&%R86-T+
  861. XM97(@;VX@=&AE(&%R8VAI=F4*("`@("`@("`@(&UE9&EU;2!I<R!S=&]R960@/
  862. XM8V]N=&EG=6]U<VQY+@H*("`@("`@("`@($)Y=&5S(')E<')E<V5N=&EN9R!T(
  863. XM:&4@8V]N=&5N=',@;V8@9FEL97,@*&%F=&5R('1H92!H96%D97(*("`@("`@1
  864. XM("`@(')E8V]R9"!O9B!E86-H(&9I;&4I(&%R92!N;W0@=')A;G-L871E9"!IR
  865. XM;B!A;GD@=V%Y(&%N9"!A<F4*("`@("`@("`@(&YO="!C;VYS=')A:6YE9"!T;
  866. XM;R!R97!R97-E;G0@8VAA<F%C=&5R<R!O<B!T;R!B92!I;B!A;GD*("`@("`@[
  867. XM("`@(&-H87)A8W1E<B!S970N("!4:&4@7PAT7PAA7PAR*#4I(&9O<FUA="!DW
  868. XM;V5S(&YO="!D:7-T:6YG=6ES:"!T97AT"B`@("`@("`@("!F:6QE<R!F<F]M9
  869. XM(&)I;F%R>2!F:6QE<RP@86YD(&YO('1R86YS;&%T:6]N(&]F(&9I;&4@8V]NX
  870. XM=&5N=',*("`@("`@("`@('-H;W5L9"!B92!P97)F;W)M960N"@H*"@H@("`@R
  871. XM(%!A9V4@,B`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@O
  872. XM("`@("`H<')I;G1E9"`S+S@O.3`I"@H*"@H*"B`@("`@5`A4"%0(5$$(00A!:
  873. XM"$%2"%((4@A2*`@H""@(*#4(-0@U"#4I""D(*0@I("`@("`@("`@("`@($$(R
  874. XM00A!"$%M"&T(;0AM:0AI"&D(:6<(9PAG"&=A"&$(80AA1`A$"$0(1$\(3PA/0
  875. XM"$]3"%,(4PA3("@(*`@H""@Q"#$(,0@Q-0@U"#4(-2!/"$\(3PA/8PAC"&,(0
  876. XM8W0(=`AT"'1O"&\(;PAO8@AB"&((8F4(90AE"&5R"'((<@AR(#$(,0@Q"#$Y`
  877. XM"#D(.0@Y.`@X"#@(.#<(-P@W"#<I""D(*0@I("`@("`@("`@("`@("!4"%0(C
  878. XM5`A400A!"$$(05((4@A2"%(H""@(*`@H-0@U"#4(-2D(*0@I""D*"@H*("`@4
  879. XM("`@("`@(%1H92!F:65L9',@7PAN7PAA7PAM7PAE+"!?"&Q?"&E?"&Y?"&M?J
  880. XM"&Y?"&%?"&U?"&4L(%\(;5\(85\(9U\(:5\(8RP@7PAU7PAN7PAA7PAM7PAE3
  881. XM+"!A;F0@7PAG7PAN7PAA7PAM7PAE(&%R90H@("`@("`@("`@;G5L;"UT97)ML
  882. XM:6YA=&5D(&-H87)A8W1E<B!S=')I;F=S+B`@06QL(&]T:&5R(&9I96QD<R!A-
  883. XM<F4*("`@("`@("`@('IE<F\M9FEL;&5D(&]C=&%L(&YU;6)E<G,@:6X@05-#[
  884. XM24DN("!%86-H(&YU;65R:6,@9FEE;&0@*&]F"B`@("`@("`@("!W:61T:"!?N
  885. XM"'<I(&-O;G1A:6YS(%\(=RTR(&1I9VET<RP@82!S<&%C92P@86YD(&$@;G5LP
  886. XM;"P@97AC97!T"B`@("`@("`@("!?"'-?"&E?"'I?"&4@86YD(%\(;5\(=%\(K
  887. XM:5\(;5\(92P@=VAI8V@@9&\@;F]T(&-O;G1A:6X@=&AE('1R86EL:6YG(&YUV
  888. XM;&PN"@H@("`@("`@("`@5&AE(%\(;E\(85\(;5\(92!F:65L9"!I<R!T:&4@Y
  889. XM<&%T:&YA;64@;V8@=&AE(&9I;&4L('=I=&@@9&ER96-T;W)Y"B`@("`@("`@K
  890. XM("!N86UE<R`H:68@86YY*2!P<F5C961I;F<@=&AE(&9I;&4@;F%M92P@<V5P#
  891. XM87)A=&5D(&)Y"B`@("`@("`@("!S;&%S:&5S+@H*("`@("`@("`@(%1H92!?+
  892. XM"&U?"&]?"&1?"&4@9FEE;&0@<')O=FED97,@;FEN92!B:71S('-P96-I9GEIJ
  893. XM;F<@9FEL90H@("`@("`@("`@<&5R;6ES<VEO;G,@86YD('1H<F5E(&)I=',@8
  894. XM=&\@<W!E8VEF>2!T:&4@4V5T(%5)1"P@4V5T($=)1`H@("`@("`@("`@86YD.
  895. XM(%-A=F4@5&5X="`H5%-65%@I(&UO9&5S+B`@5F%L=65S(&9O<B!T:&5S92!B&
  896. XM:71S(&%R90H@("`@("`@("`@9&5F:6YE9"!A8F]V92X@(%=H96X@<W!E8VEA#
  897. XM;"!P97)M:7-S:6]N<R!A<F4@<F5Q=6ER960@=&\*("`@("`@("`@(&-R96%T]
  898. XM92!A(&9I;&4@=VET:"!A(&=I=F5N(&UO9&4L(&%N9"!T:&4@=7-E<B!R97-T>
  899. XM;W)I;F<*("`@("`@("`@(&9I;&5S(&9R;VT@=&AE(&%R8VAI=F4@9&]E<R!N,
  900. XM;W0@:&]L9"!S=6-H('!E<FUI<W-I;VYS+"!T:&4*("`@("`@("`@(&UO9&4@U
  901. XM8FET*',I('-P96-I9GEI;F<@=&AO<V4@<W!E8VEA;"!P97)M:7-S:6]N<R!AU
  902. XM<F4*("`@("`@("`@(&EG;F]R960N("!-;V1E<R!W:&EC:"!A<F4@;F]T('-US
  903. XM<'!O<G1E9"!B>2!T:&4@;W!E<F%T:6YG"B`@("`@("`@("!S>7-T96T@<F5S<
  904. XM=&]R:6YG(&9I;&5S(&9R;VT@=&AE(&%R8VAI=F4@=VEL;"!B92!I9VYO<F5D$
  905. XM+@H@("`@("`@("`@56YS=7!P;W)T960@;6]D97,@<VAO=6QD(&)E(&9A:V5D*
  906. XM('5P('=H96X@8W)E871I;F<@86X*("`@("`@("`@(&%R8VAI=F4[(&4N9RX@"
  907. XM('1H92!G<F]U<"!P97)M:7-S:6]N(&-O=6QD(&)E(&-O<&EE9"!F<F]M('1H9
  908. XM90H@("`@("`@("`@8&]T:&5R)R!P97)M:7-S:6]N+@H*("`@("`@("`@(%1H_
  909. XM92!?"'5?"&E?"&0@86YD(%\(9U\(:5\(9"!F:65L9',@87)E('1H92!U<V5R'
  910. XM(&%N9"!G<F]U<"!)1"!O9B!T:&4@9FEL90H@("`@("`@("`@;W=N97)S+"!R)
  911. XM97-P96-T:79E;'DN"@H@("`@("`@("`@5&AE(%\(<U\(:5\(>E\(92!F:65L'
  912. XM9"!I<R!T:&4@<VEZ92!O9B!T:&4@9FEL92!I;B!B>71E<SL@;&EN:V5D"B`@,
  913. XM("`@("`@("!F:6QE<R!A<F4@87)C:&EV960@=VET:"!T:&ES(&9I96QD('-PL
  914. XM96-I9FEE9"!A<R!Z97)O+@H*("`@("`@("`@(%1H92!?"&U?"'1?"&E?"&U?2
  915. XM"&4@9FEE;&0@:7,@=&AE(&UO9&EF:6-A=&EO;B!T:6UE(&]F('1H92!F:6QEI
  916. XM(&%T('1H90H@("`@("`@("`@=&EM92!I="!W87,@87)C:&EV960N("!)="!I1
  917. XM<R!T:&4@05-#24D@<F5P<F5S96YT871I;VX@;V8@=&AE"B`@("`@("`@("!O_
  918. XM8W1A;"!V86QU92!O9B!T:&4@;&%S="!T:6UE('1H92!F:6QE('=A<R!M;V1IO
  919. XM9FEE9"P*("`@("`@("`@(')E<')E<V5N=&5D(&%S(&EN(&EN=&5G97(@;G5M8
  920. XM8F5R(&]F('-E8V]N9',@<VEN8V4@2F%N=6%R>2`Q+`H@("`@("`@("`@,3DW1
  921. XM,"P@,#`Z,#`@0V]O<F1I;F%T960@56YI=F5R<V%L(%1I;64N"@H@("`@("`@L
  922. XM("`@5&AE(%\(8U\(:%\(:U\(<U\(=5\(;2!F:65L9"!I<R!T:&4@05-#24D@`
  923. XM<F5P<F5S96YT86EO;B!O9B!T:&4@;V-T86P*("`@("`@("`@('9A;'5E(&]FD
  924. XM('1H92!S:6UP;&4@<W5M(&]F(&%L;"!B>71E<R!I;B!T:&4@:&5A9&5R(')EM
  925. XM8V]R9"X*("`@("`@("`@($5A8V@@."UB:70@8GET92!I;B!T:&4@:&5A9&5R*
  926. XM(&ES('1R96%T960@87,@86X@=6YS:6=N960*("`@("`@("`@('9A;'5E+B`@Z
  927. XM5&AE<V4@=F%L=65S(&%R92!A9&1E9"!T;R!A;B!U;G-I9VYE9"!I;G1E9V5R0
  928. XM+`H@("`@("`@("`@:6YI=&EA;&EZ960@=&\@>F5R;RP@=&AE('!R96-I<VEOZ
  929. XM;B!O9B!W:&EC:"!S:&%L;"!B92!N;R!L97-S"B`@("`@("`@("!T:&%N('-ER
  930. XM=F5N=&5E;B!B:71S+B`@5VAE;B!C86QC=6QA=&EN9R!T:&4@8VAE8VMS=6TLN
  931. XM('1H90H@("`@("`@("`@7PAC7PAH7PAK7PAS7PAU7PAM(&9I96QD(&ES('1R&
  932. XM96%T960@87,@:68@:70@=V5R92!A;&P@8FQA;FMS+@H*("`@("`@("`@(%1HH
  933. XM92!?"'1?"'E?"'!?"&5?"&9?"&Q?"&%?"&<@9FEE;&0@<W!E8VEF:65S('1H4
  934. XM92!T>7!E(&]F(&9I;&4@87)C:&EV960N("!)9@H@("`@("`@("`@82!P87)T!
  935. XM:6-U;&%R(&EM<&QE;65N=&%T:6]N(&1O97,@;F]T(')E8V]G;FEZ92!O<B!PY
  936. XM97)M:70@=&AE"B`@("`@("`@("!S<&5C:69I960@='EP92P@=&AE(&9I;&4@'
  937. XM=VEL;"!B92!E>'1R86-T960@87,@:68@:70@=V5R92!A"B`@("`@("`@("!RS
  938. XM96=U;&%R(&9I;&4N("!!<R!T:&ES(&%C=&EO;B!O8V-U<G,L(%\(=%\(85\(=
  939. XM<B!I<W-U97,@82!W87)N:6YG"B`@("`@("`@("!T;R!T:&4@<W1A;F1A<F0@D
  940. XM97)R;W(N"@H@("`@("`@("`@3$9?3D]234%,(&]R($Q&7T],1$Y/4DU!3`H@*
  941. XM("`@("`@("`@("`@("!R97!R97-E;G1S(&$@<F5G=6QA<B!F:6QE+B`@1F]RS
  942. XM(&)A8VMW87)D(&-O;7!A=&EB:6QI='DL"B`@("`@("`@("`@("`@(&$@7PATK
  943. XM7PAY7PAP7PAE7PAF7PAL7PAA7PAG('9A;'5E(&]F($Q&7T],1$Y/4DU!3"!SW
  944. XM:&]U;&0@8F4@<VEL96YT;'D*"@H*("`@("!086=E(#,@("`@("`@("`@("`@/
  945. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@*'!R:6YT960@,R\X+SDPP
  946. XM*0H*"@H*"@H@("`@(%0(5`A4"%1!"$$(00A!4@A2"%((4B@(*`@H""@U"#4(E
  947. XM-0@U*0@I""D(*2`@("`@("`@("`@("!!"$$(00A!;0AM"&T(;6D(:0AI"&EG9
  948. XM"&<(9PAG80AA"&$(840(1`A$"$1/"$\(3PA/4PA3"%,(4R`H""@(*`@H,0@Q+
  949. XM"#$(,34(-0@U"#4@3PA/"$\(3V,(8PAC"&-T"'0(=`AT;PAO"&\(;V((8@ABH
  950. XM"&)E"&4(90AE<@AR"'((<B`Q"#$(,0@Q.0@Y"#D(.3@(.`@X"#@W"#<(-P@W:
  951. XM*0@I""D(*2`@("`@("`@("`@("`@5`A4"%0(5$$(00A!"$%2"%((4@A2*`@HX
  952. XM""@(*#4(-0@U"#4I""D(*0@I"@H*"B`@("`@("`@("`@("`@(')E8V]G;FEZQ
  953. XM960@87,@82!R96=U;&%R(&9I;&4N("!.97<@87)C:&EV97,@<VAO=6QD(&)ES
  954. XM"B`@("`@("`@("`@("`@(&-R96%T960@=7-I;F<@3$9?3D]234%,+B`@06QSP
  955. XM;RP@9F]R(&)A8VMW87)D"B`@("`@("`@("`@("`@(&-O;7!A=&%B:6QI='DLI
  956. XM(%\(=%\(85\(<B!T<F5A=',@82!R96=U;&%R(&9I;&4@=VAO<V4@;F%M90H@3
  957. XM("`@("`@("`@("`@("!E;F1S('=I=&@@82!S;&%S:"!A<R!A(&1I<F5C=&]RS
  958. XM>2X*"B`@("`@("`@("!,1E],24Y+"B`@("`@("`@("`@("`@(')E<')E<V5NH
  959. XM=',@82!F:6QE(&QI;FME9"!T;R!A;F]T:&5R(&9I;&4L(&]F(&%N>2!T>7!E^
  960. XM+`H@("`@("`@("`@("`@("!P<F5V:6]U<VQY(&%R8VAI=F5D+B`@4W5C:"!FE
  961. XM:6QE<R!A<F4@:61E;G1I9FEE9"!I;B!5;FEX"B`@("`@("`@("`@("`@(&)YZ
  962. XM(&5A8V@@9FEL92!H879I;F<@=&AE('-A;64@9&5V:6-E(&%N9"!I;F]D92!N5
  963. XM=6UB97(N"B`@("`@("`@("`@("`@(%1H92!L:6YK960M=&\@;F%M92!I<R!S+
  964. XM<&5C:69I960@:6X@=&AE(%\(;%\(:5\(;E\(:U\(;E\(85\(;5\(92!F:65LX
  965. XM9`H@("`@("`@("`@("`@("!W:71H(&$@=')A:6QI;F<@;G5L;"X*"B`@("`@"
  966. XM("`@("!,1E]364U,24Y+"B`@("`@("`@("`@("`@(')E<')E<V5N=',@82!S!
  967. XM>6UB;VQI8R!L:6YK('1O(&%N;W1H97(@9FEL92X@(%1H90H@("`@("`@("`@J
  968. XM("`@("!L:6YK960M=&\@;F%M92!I<R!S<&5C:69I960@:6X@=&AE(%\(;%\(B
  969. XM:5\(;E\(:U\(;E\(85\(;5\(92!F:65L9"!W:71H"B`@("`@("`@("`@("`@7
  970. XM(&$@=')A:6QI;F<@;G5L;"X*"B`@("`@("`@("!,1E]#2%(@;W(@3$9?0DQ+1
  971. XM"B`@("`@("`@("`@("`@(')E<')E<V5N="!C:&%R86-T97(@<W!E8VEA;"!F6
  972. XM:6QE<R!A;F0@8FQO8VL@<W!E8VEA;`H@("`@("`@("`@("`@("!F:6QE<R!R[
  973. XM97-P96-T:79E;'DN("!);B!T:&ES(&-A<V4@=&AE(%\(9%\(95\(=E\(;5\(6
  974. XM85\(:E\(;U\(<B!A;F0*("`@("`@("`@("`@("`@7PAD7PAE7PAV7PAM7PAIV
  975. XM7PAN7PAO7PAR(&9I96QD<R!W:6QL(&-O;G1A:6X@=&AE(&UA:F]R(&%N9"!MY
  976. XM:6YO<B!D979I8V4*("`@("`@("`@("`@("`@;G5M8F5R<R!R97-P96-T:79E(
  977. XM;'DN("!/<&5R871I;F<@<WES=&5M<R!M87D@;6%P('1H90H@("`@("`@("`@D
  978. XM("`@("!D979I8V4@<W!E8VEF:6-A=&EO;G,@=&\@=&AE:7(@;W=N(&QO8V%LB
  979. XM('-P96-I9FEC871I;VXL"B`@("`@("`@("`@("`@(&]R(&UA>2!I9VYO<F4@C
  980. XM=&AE(&5N=')Y+@H*("`@("`@("`@($Q&7T1)4@H@("`@("`@("`@("`@("!S"
  981. XM<&5C:69I97,@82!D:7)E8W1O<GD@;W(@<W5B+61I<F5C=&]R>2X@(%1H92!D^
  982. XM:7)E8W1O<GD*("`@("`@("`@("`@("`@;F%M92!I;B!T:&4@7PAN7PAA7PAME
  983. XM7PAE(&9I96QD('-H;W5L9"!E;F0@=VET:"!A('-L87-H+B`@3VX*("`@("`@#
  984. XM("`@("`@("`@<WES=&5M<R!W:&5R92!D:7-K(&%L;&]C871I;VX@:7,@<&5RG
  985. XM9F]R;65D(&]N(&$*("`@("`@("`@("`@("`@9&ER96-T;W)Y(&)A<VES('1HH
  986. XM92!?"'-?"&E?"'I?"&4@9FEE;&0@=VEL;"!C;VYT86EN('1H92!M87AI;75MC
  987. XM"B`@("`@("`@("`@("`@(&YU;6)E<B!O9B!B>71E<R`H=VAI8V@@;6%Y(&)E8
  988. XM(')O=6YD960@=&\@=&AE(&YE87)E<W0*("`@("`@("`@("`@("`@9&ES:R!B>
  989. XM;&]C:R!A;&QO8V%T:6]N('5N:70I('=H:6-H('1H92!D:7)E8W1O<GD@;6%YH
  990. XM"B`@("`@("`@("`@("`@(&AO;&0N("!!(%\(<U\(:5\(>E\(92!F:65L9"!OJ
  991. XM9B!Z97)O(&EN9&EC871E<R!N;R!S=6-H(&QI;6ET:6YG+@H@("`@("`@("`@?
  992. XM("`@("!3>7-T96US('=H:6-H(&1O(&YO="!S=7!P;W)T(&QI;6ET:6YG(&EN@
  993. XM('1H:7,@;6%N;F5R"B`@("`@("`@("`@("`@('-H;W5L9"!I9VYO<F4@=&AEW
  994. XM(%\(<U\(:5\(>E\(92!F:65L9"X*"B`@("`@("`@("!,1E]&249/"B`@("`@<
  995. XM("`@("`@("`@('-P96-I9FEE<R!A($9)1D\@<W!E8VEA;"!F:6QE+B`@3F]T@
  996. XM92!T:&%T('1H92!A<F-H:79I;F<*("`@("`@("`@("`@("`@;V8@82!&249/V
  997. XM(&9I;&4@87)C:&EV97,@=&AE(&5X:7-T96YC92!O9B!T:&ES(&9I;&4@86YD>
  998. XM"B`@("`@("`@("`@("`@(&YO="!I=',@8V]N=&5N=',N"@H@("`@("`@("`@[
  999. XM3$9?0T].5$E'"B`@("`@("`@("`@("`@('-P96-I9FEE<R!A(&-O;G1I9W5OC
  1000. XM=7,@9FEL92P@=VAI8V@@:7,@=&AE('-A;64@87,@80H@("`@("`@("`@("`@)
  1001. XM("!N;W)M86P@9FEL92!E>&-E<'0@=&AA="P@:6X@;W!E<F%T:6YG('-Y<W1EG
  1002. XM;7,@=VAI8V@*("`@("`@("`@("`@("`@<W5P<&]R="!I="P@86QL(&ET<R!S?
  1003. XM<&%C92!I<R!A;&QO8V%T960@8V]N=&EG=6]U<VQY(&]N"B`@("`@("`@("`@:
  1004. XM("`@('1H92!D:7-K+B`@3W!E<F%T:6YG('-Y<W1E;7,@=VAI8V@@9&\@;F]TR
  1005. XM(&%L;&]W"B`@("`@("`@("`@("`@(&-O;G1I9W5O=7,@86QL;V-A=&EO;B!S2
  1006. XM:&]U;&0@<VEL96YT;'D@=')E870@=&AI<R!T>7!E"B`@("`@("`@("`@("`@T
  1007. XM(&%S(&$@;F]R;6%L(&9I;&4N"@H@("`@("`@("`@8$$G("T@8%HG"B`@("`@@
  1008. XM("`@("`@("`@(&%R92!R97-E<G9E9"!F;W(@8W5S=&]M(&EM<&QE;65N=&%T:
  1009. XM:6]N<RX@($YO;F4@87)E('5S960*("`@("`@("`@("`@("`@8GD@=&AI<R!V3
  1010. XM97)S:6]N(&]F('1H92!?"'1?"&%?"'(@<')O9W)A;2X*"@H*("`@("!086=E-
  1011. XM(#0@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@T
  1012. XM*'!R:6YT960@,R\X+SDP*0H*"@H*"@H@("`@(%0(5`A4"%1!"$$(00A!4@A2O
  1013. XM"%((4B@(*`@H""@U"#4(-0@U*0@I""D(*2`@("`@("`@("`@("!!"$$(00A!0
  1014. XM;0AM"&T(;6D(:0AI"&EG"&<(9PAG80AA"&$(840(1`A$"$1/"$\(3PA/4PA3"
  1015. XM"%,(4R`H""@(*`@H,0@Q"#$(,34(-0@U"#4@3PA/"$\(3V,(8PAC"&-T"'0(F
  1016. XM=`AT;PAO"&\(;V((8@AB"&)E"&4(90AE<@AR"'((<B`Q"#$(,0@Q.0@Y"#D(O
  1017. XM.3@(.`@X"#@W"#<(-P@W*0@I""D(*2`@("`@("`@("`@("`@5`A4"%0(5$$(2
  1018. XM00A!"$%2"%((4@A2*`@H""@(*#4(-0@U"#4I""D(*0@I"@H*"B`@("`@("`@[
  1019. XM("!?"&]?"'1?"&A?"&5?"'(*("`@("`@("`@("`@("`@=F%L=65S(&%R92!R)
  1020. XM97-E<G9E9"!F;W(@<W!E8VEF:6-A=&EO;B!I;B!F=71U<F4*("`@("`@("`@R
  1021. XM("`@("`@<F5V:7-I;VYS(&]F('1H92!0,3`P,R!S=&%N9&%R9"P@86YD('-H7
  1022. XM;W5L9"!N;W0@8F4@=7-E9`H@("`@("`@("`@("`@("!B>2!A;GD@7PAT7PAA-
  1023. XM7PAR('!R;V=R86TN"@H@("`@("`@("`@5&AE(%\(;5\(85\(9U\(:5\(8R!F^
  1024. XM:65L9"!I;F1I8V%T97,@=&AA="!T:&ES(&%R8VAI=F4@=V%S(&]U='!U="!IB
  1025. XM;@H@("`@("`@("`@=&AE(%`Q,#`S(&%R8VAI=F4@9F]R;6%T+B`@268@=&AI:
  1026. XM<R!F:65L9"!C;VYT86EN<R!434%'24,L"B`@("`@("`@("!T:&5N('1H92!?P
  1027. XM"'5?"&Y?"&%?"&U?"&4@86YD(%\(9U\(;E\(85\(;5\(92!F:65L9',@=VEL[
  1028. XM;"!C;VYT86EN('1H92!!4T-)20H@("`@("`@("`@<F5P<F5S96YT871I;VX@_
  1029. XM;V8@=&AE(&]W;F5R(&%N9"!G<F]U<"!O9B!T:&4@9FEL90H@("`@("`@("`@!
  1030. XM<F5S<&5C=&EV96QY+B`@268@9F]U;F0L('1H92!U<V5R(&%N9"!G<F]U<"!)M
  1031. XM1"!R97!R97-E;G1E9`H@("`@("`@("`@8GD@=&AE<V4@;F%M97,@=VEL;"!BQ
  1032. XM92!U<V5D(')A=&AE<B!T:&%N('1H92!V86QU97,@8V]N=&%I;F5D"B`@("`@W
  1033. XM("`@("!W:71H:6X@=&AE(%\(=5\(:5\(9"!A;F0@7PAG7PAI7PAD(&9I96QDK
  1034. XM<RX@(%5S97(@;F%M97,@;&]N9V5R('1H86X*("`@("`@("`@(%153DU,14XM`
  1035. XM,2!O<B!G<F]U<"!N86UE<R!L;VYG97(@=&AA;B!41TY-3$5.+3$@8VAA<F%CZ
  1036. XM=&5R<PH@("`@("`@("`@=VEL;"!B92!T<G5N8V%T960N"@H@("`@(%,(4PA3\
  1037. XM"%-%"$4(10A%10A%"$4(12!!"$$(00A!3`A,"$P(3%,(4PA3"%-/"$\(3PA/O
  1038. XM"B`@("`@("`@("!T87(H,2DL(&%R*#4I+"!C<&EO*#4I+"!D=6UP*#@I+"!R^
  1039. XM97-T;W(H."DL(')E<W1O<F4H."D*"B`@("`@0@A""$((0E4(50A5"%5'"$<(M
  1040. XM1PA'4PA3"%,(4PH@("`@("`@("`@3F%M97,@;W(@;&EN:R!N86UE<R!L;VYG+
  1041. XM97(@=&AA;B!.04U325HM,2!C:&%R86-T97)S(&-A;FYO=`H@("`@("`@("`@?
  1042. XM8F4@87)C:&EV960N"@H@("`@("`@("`@5&AI<R!F;W)M870@9&]E<R!N;W0@,
  1043. XM>65T(&%D9')E<W,@;75L=&DM=F]L=6UE(&%R8VAI=F5S+@H*("`@("!."$X(K
  1044. XM3@A.3PA/"$\(3U0(5`A4"%1%"$4(10A%4PA3"%,(4PH@("`@("`@("`@5&AI?
  1045. XM<R!M86YU86P@<&%G92!W87,@861A<'1E9"!B>2!*;VAN($=I;&UO<F4@9G)OL
  1046. XM;2!$<F%F="`V(&]F"B`@("`@("`@("!T:&4@4#$P,#,@<W!E8VEF:6-A=&EO;
  1047. XM;@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*("`@("!086=E(#4@("`@"
  1048. XM("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@*'!R:6YTU
  1049. X.960@,R\X+SDP*0H*"@H@,
  1050. X``
  1051. Xend
  1052. Xsize 13919
  1053. END_OF_FILE
  1054. if test 19528 -ne `wc -c <'tar.5.man.uu'`; then
  1055.     echo shar: \"'tar.5.man.uu'\" unpacked with wrong size!
  1056. fi
  1057. # end of 'tar.5.man.uu'
  1058. fi
  1059. echo shar: End of archive 4 \(of 5\).
  1060. cp /dev/null ark4isdone
  1061. MISSING=""
  1062. for I in 1 2 3 4 5 ; do
  1063.     if test ! -f ark${I}isdone ; then
  1064.     MISSING="${MISSING} ${I}"
  1065.     fi
  1066. done
  1067. if test "${MISSING}" = "" ; then
  1068.     echo You have unpacked all 5 archives.
  1069.     rm -f ark[1-9]isdone
  1070. else
  1071.     echo You still need to unpack the following archives:
  1072.     echo "        " ${MISSING}
  1073. fi
  1074. ##  End of shell archive.
  1075. exit 0
  1076. -- 
  1077. Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
  1078. Mail comments to the moderator at <amiga-request@cs.odu.edu>.
  1079. Post requests for sources, and general discussion to comp.sys.amiga.
  1080.